#include <stdio.h>

// 任意一个二进制浮点数v都可以表示成下面的形式
// v = (-1)^s *M *2^E
// (-1)^s 符号位，s=0时，正数；s=1时，负数
// M标识有效数字， >=1,<2
// 2^E表示指数位

// 单精度：
// 双精度：
int main()
{
    // 关键点1：float 后面有6位小数
    // 关键点2：
    int  n = 9;
    // 00000000 00000000 00000000 00001001
    float *p = (float *)&n;
    // 如果强转为 float*类型
    // 0 00000000 000000000000...1001
    // s    e       m
    printf("n==d=1=%d\n",n); // 9
    printf("n==f=1=%f\n", *p); // 0.000000 ，e全0,无线小，所以输出为0

    *p = 9.0;
    // 二进制：1001.0
    // S = 0 , E = 3 , M = 1.001
    // float保存为为 ： 0  10000010 001 0000...共32位
    // 01000001 00010000 00000000 00000000 即 1091567616

    printf("n==d=2=%d\n", n); // 1091567616
    printf("n==d=2=%f\n", *p); // 9.000000
    return 0;
}